# -*- coding:utf-8 -*-
# 生成器
# 生成器的本质就是迭代器

# 创建生成器的方案
# 生成器函数中有一个关键字 yield
# 生成器函数执行的时候，并不会执行函数，得到的是生成器
# 生成器函数
# 只要函数中出现了yield，那他就是一个生成器函数
# def func():
#     print("你好")
#     yield
#
#
# ret = func()
# print(ret)        # 打印一个生成器对象 <generator object func at 0x000001DEB88D04A0>


# 可以返回数据
# 可以分段执行函数的内容，通过next，执行到下一个yield的位置
# def func():
#     print("第一个函数")
#     yield "你好，第一个函数"
#     print("第二个函数")
#     yield "你好，第二个函数"
#
#
# ret = func()
# print(ret.__next__())
# print(ret.__next__())


# yield与return的区别
"""
和 return 相比，yield 除了可以返回相应的值，还有一个更重要的功能，
即每当程序执行完该语句时，程序就会暂停执行。不仅如此，即便调用生成器函数，
Python 解释器也不会执行函数中的代码，它只会返回一个生成器（对象）
当return执行时会将全部的数据，临时存入内存单中，数据过多，可能导致内存崩盘
而yield可以，先存入一部分，当之一部分释放后，在存入下一部分，可避免数据过多时的内存崩盘。
"""


# 生成器函数用例：
def func():
    li = []
    for i in range(1, 101):
        li.append(f"香菇包{i}")
    yield li


list1 = func()
print(list1.__next__())
